package com.example.cloudmusic.home.model

/**
 * 首页不同区块的数据模型
 */
sealed class HomeItem {
    /**
     * 广告轮番图
     */
    data class BannerSection(
        val id: String,
        val items: List<Banner>
    ) : HomeItem()
    
    /**
     * 推荐歌单
     */
    data class RecommendedPlaylistsSection(
        val id: String,
        val title: String,//推荐歌单
        val playlists: List<Playlist>
    ) : HomeItem()

    /**
     * 推荐歌曲
     */
    data class RecommendedMusicsSection(
        val id: String,
        val title: String,//推荐歌单
        val musics: List<Music>
    ) : HomeItem()


    /**
     * 艺人区块
     */
    data class ArtistSection(
        val id: String,
        val title: String,//林俊杰等艺人
        val artists: List<Artist>
    ) : HomeItem()

    /**
     * 私人歌单
     */
    data class PersonalPlaylistSection(
        val id: String,
        val title: String,//私人歌单
        val items: List<Playlist>
    ) : HomeItem()
    
    /**
     * 音乐风格
     */
    data class MusicStyleSection(
        val id: String,
        val title: String,//音乐风格:摇滚、轻音乐、等
        val musics: List<MusicStyle>
    ) : HomeItem()
    
    companion object {
        const val TYPE_RECOMMENDED_PLAYLIST = 0 //推荐歌单
        const val TYPE_BANNER = 1 //广告轮番图
        const val TYPE_ARTIST = 2 //艺人
        const val TYPE_PERSONAL_PLAYLIST = 3 //私人歌单
        const val TYPE_MUSIC_STYLE = 4 //音乐风格
        const val TYPE_RECOMMENDED_MUSICS = 5 //推荐歌曲
    }
}

/**
 * 歌单
 */
data class Playlist(
    val id: String,
    val title: String, //歌单标题
    val artist: String,//创建者
    val imageUrl: String,//歌单封面图
    val playCount: Long = 0, //歌曲数量
    val description:String,
    val musics:List<Music> //歌曲列表
)

/**
 * 轮播图项：广告
 */
data class Banner(
    val id: String,
    val imageUrl: String
)

/**
 * 艺人项
 */
data class Artist(
    val id: String,
    val name: String,
    val imageUrl: String,
    val followers: Long = 0,
    val musics: List<Music>//歌曲列表
)

/**
 * 歌曲项
 */
data class Music(
    val id: String,
    val title: String,        // 歌曲标题
    val artist: String,       // 歌手名称
    val album: String = "",   // 专辑名称
    val imageUrl: String,     // 封面图片
    val duration: Long = 0,   // 歌曲时长（毫秒）
    val playUrl: String,  // 播放链接
    val isVip: Boolean = false,  // 是否VIP歌曲
    val isFavorite: Boolean = false,  // 是否已收藏
    val type:String  //歌曲类型
)

/**
 * 歌曲风格
 */

data class MusicStyle(
    val style:String,
    val imageUrl: String,     // 封面图片
    val musics:List<Playlist>
)